SQL EXISTS Operator என்றால் என்ன?
EXISTS operator ஒரு subquery-ல் எந்த பதிவும் உள்ளதா என சோதிக்கப் பயன்படுகிறது.
Subquery ஒன்று அல்லது அதற்கு மேற்பட்ட பதிவுகளை திருப்பித் தந்தால் EXISTS operator TRUE-ஐ தரும்.
EXISTS தொடரியல்
SELECT column_name(s)
FROM table_name
WHERE EXISTS
(SELECT column_name FROM table_name WHERE condition);
ஆர்ப்பாட்ட தரவுத்தளம்
Northwind மாதிரி தரவுத்தளத்தில் "Products" அட்டவணையில் இருந்து ஒரு தேர்வு கீழே உள்ளது:
Products அட்டவணை
+-----------+------------------------------+------------+------------+-----------------------+-------+
| ProductID | ProductName | SupplierID | CategoryID | Unit | Price |
+-----------+------------------------------+------------+------------+-----------------------+-------+
| 1 | Chais | 1 | 1 | 10 boxes x 20 bags | 18 |
| 2 | Chang | 1 | 1 | 24 - 12 oz bottles | 19 |
| 3 | Aniseed Syrup | 1 | 2 | 12 - 550 ml bottles | 10 |
| 4 | Chef Anton's Cajun Seasoning | 2 | 2 | 48 - 6 oz jars | 22 |
| 5 | Chef Anton's Gumbo Mix | 2 | 2 | 36 boxes | 21.35 |
+-----------+------------------------------+------------+------------+-----------------------+-------+
மற்றும் "Suppliers" அட்டவணையில் இருந்து ஒரு தேர்வு:
Suppliers அட்டவணை
+------------+-----------------------------+-------------------+---------------------+-------------+------------+---------+
| SupplierID | SupplierName | ContactName | Address | City | PostalCode | Country |
+------------+-----------------------------+-------------------+---------------------+-------------+------------+---------+
| 1 | Exotic Liquid | Charlotte Cooper | 49 Gilbert St. | London | EC1 4SD | UK |
| 2 | New Orleans Cajun Delights | Shelley Burke | P.O. Box 78934 | New Orleans | 70117 | USA |
| 3 | Grandma Kelly's Homestead | Regina Murphy | 707 Oxford Rd. | Ann Arbor | 48104 | USA |
| 4 | Tokyo Traders | Yoshi Nagase | 9-8 Sekimai... | Tokyo | 100 | Japan |
+------------+-----------------------------+-------------------+---------------------+-------------+------------+---------+
SQL EXISTS உதாரணங்கள்
பின்வரும் SQL statement TRUE-ஐ திருப்பித் தந்து, தயாரிப்பு விலை 20-க்கும் குறைவாக உள்ள சப்ளையர்களை பட்டியலிடுகிறது:
உதாரணம்
SELECT SupplierName
FROM Suppliers
WHERE EXISTS (SELECT ProductName FROM Products
WHERE Products.SupplierID = Suppliers.supplierID AND Price < 20);
முடிவு
பின்வரும் SQL statement TRUE-ஐ திருப்பித் தந்து, தயாரிப்பு விலை 22-க்கு சமமாக உள்ள சப்ளையர்களை பட்டியலிடுகிறது:
உதாரணம்
SELECT SupplierName
FROM Suppliers
WHERE EXISTS (SELECT ProductName FROM Products
WHERE Products.SupplierID = Suppliers.supplierID AND Price = 22);
முடிவு
EXISTS எவ்வாறு வேலை செய்கிறது
முதன்மை Query தொடங்குகிறது
Suppliers அட்டவணையில் இருந்து ஒவ்வொரு வரிசையும் பார்க்கப்படுகிறது
SELECT SupplierName FROM Suppliers
Subquery இயக்கப்படுகிறது
ஒவ்வொரு Supplier-க்கும் Products அட்டவணையில் பொருந்தக்கூடிய பதிவுகள் சோதிக்கப்படுகின்றன
WHERE EXISTS (SELECT ... WHERE Products.SupplierID = Suppliers.supplierID)
முடிவு மதிப்பீடு செய்யப்படுகிறது
Subquery ஒன்று அல்லது அதற்கு மேற்பட்ட வரிசைகளை திருப்பித் தந்தால் EXISTS TRUE-ஐ தரும்
இறுதி முடிவு
TRUE-ஐ தந்த Suppliers மட்டும் இறுதி முடிவில் சேர்க்கப்படுகின்றன
SupplierName மட்டும் திருப்பித் தரப்படும்
EXISTS vs IN ஒப்பீடு
EXISTS Operator
- boolean மதிப்பை தரும் (TRUE/FALSE)
- Subquery முடிவுகளின் இருப்பை சோதிக்கிறது
- முதல் பொருந்தும் பதிவைக் கண்டுபிடித்தவுடன் நிறுத்துகிறது
- பெரிய தரவுத்தளங்களுக்கு மேலும் திறமையானது
- Correlated subqueries-உடன் நன்றாக வேலை செய்கிறது
SELECT name
FROM customers c
WHERE EXISTS (
SELECT 1
FROM orders o
WHERE o.customer_id = c.id
);
IN Operator
- மதிப்புகளின் பட்டியலை சோதிக்கிறது
- மதிப்பு பட்டியலில் உள்ளதா என சோதிக்கிறது
- அனைத்து முடிவுகளையும் மதிப்பீடு செய்கிறது
- சிறிய மதிப்புப் பட்டியல்களுக்கு ஏற்றது
- Static value lists-உடன் நன்றாக வேலை செய்கிறது
SELECT name
FROM customers
WHERE id IN (
SELECT customer_id
FROM orders
);
நடைமுறை உதாரணங்கள்
ஆர்டர் இடுத்த வாடிக்கையாளர்கள்
குறைந்தது ஒரு ஆர்டர் இடுத்துள்ள வாடிக்கையாளர்களைக் கண்டறிய
SELECT CustomerName
FROM Customers c
WHERE EXISTS (
SELECT 1
FROM Orders o
WHERE o.CustomerID = c.CustomerID
);
தயாரிப்புகள் விற்கப்பட்ட சப்ளையர்கள்
குறைந்தது ஒரு தயாரிப்பை விற்ற சப்ளையர்களைக் கண்டறிய
SELECT SupplierName
FROM Suppliers s
WHERE EXISTS (
SELECT 1
FROM Products p
WHERE p.SupplierID = s.SupplierID
AND p.UnitsInStock > 0
);
பணியாளர் சேமிப்புகள்
குறைந்தது ஒரு சேமிப்பைக் கொண்ட பணியாளர்களைக் கண்டறிய
SELECT EmployeeName
FROM Employees e
WHERE EXISTS (
SELECT 1
FROM Territories t
WHERE t.EmployeeID = e.EmployeeID
);
NOT EXISTS Operator
NOT EXISTS operator EXISTS-ன் எதிர்மறையாகும். Subquery பதிவுகளை திருப்பித் தராதபோது TRUE-ஐ தரும்.
NOT EXISTS உதாரணம்
SELECT SupplierName
FROM Suppliers
WHERE NOT EXISTS (SELECT ProductName FROM Products
WHERE Products.SupplierID = Suppliers.supplierID);
முடிவு
பயன்பாடு:
NOT EXISTS மூலம் எந்த தயாரிப்புகளும் இல்லாத சப்ளையர்களைக் கண்டறியலாம். இது "missing records" கண்டறிய பயனுள்ளதாக இருக்கும்.
செயல்திறன் நன்மைகள்
முதல் பொருந்தும் பதிவில் நிறுத்துகிறது
EXISTS முதல் பொருந்தும் பதிவைக் கண்டுபிடித்தவுடன் subquery-ன் செயல்பாட்டை நிறுத்துகிறது
குறைந்த மெமரி பயன்பாடு
முழு முடிவு தொகுப்பை சேமிக்க தேவையில்லை, boolean மதிப்பு மட்டுமே தேவை
திறமையான குறியீட்டு பயன்பாடு
EXISTS correlated subqueries-ல் indexes-ஐ திறமையாகப் பயன்படுத்தும்